package com.sakura.oj.utils;

import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.Sign;
import cn.hutool.crypto.asymmetric.SignAlgorithm;
import com.sakura.oj.model.vo.LoginUserVO;

import java.nio.charset.StandardCharsets;

/**
 * token相关工具类
 */
public class TokenUtil {

    final static Sign sign = SecureUtil.sign(SignAlgorithm.SHA1withDSA);

    public static String createToken(LoginUserVO loginUserVO) {
        // 2. 构造签名数据
        String signData = loginUserVO.getId() + loginUserVO.getUserName();
        byte[] signDataBytes = signData.getBytes(StandardCharsets.UTF_8); // 明确编码

        // 3. 生成签名（Hex格式）
        return sign.signHex(signDataBytes);
    }

    public static boolean verifyToken(String token) {
        // 2. 构造签名数据
        byte[] signDataBytes = token.getBytes(StandardCharsets.UTF_8); // 明确编码

        // 3. 生成签名（Hex格式）
        String signHex = sign.signHex(signDataBytes);

        // 4. 验证签名 SignatureException: Invalid encoding for signature
        return sign.verify(signDataBytes, HexUtil.decodeHex(signHex));
    }
}
